package app;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import dao.*;

import bean.*;

import InterfazRemota.InterfazRemotaSwing;
import InterfazRemota.RestoranException;
import NegocioVO.EmpleadoVO;
import NegocioVO.ItemRequerimientoVO;
import NegocioVO.ProveedorVO;

/*
 * Agregado por NS. El motivo es poder separar los metodos que solo se usan en JSP 
 * de los que solo se usan en Swing.
 */
public class ControladorSwing extends UnicastRemoteObject implements InterfazRemotaSwing{

	
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static Controlador instancia;
	
	public ControladorSwing() throws RemoteException {
		super();
	}

	public static Controlador getInstancia() throws RemoteException{
		if(instancia == null)
			instancia = new Controlador();
		return instancia;
	}

	@Override
	public void altaProductosDeposito(EmpleadoVO arg0, ProveedorVO arg1,Vector<ItemRequerimientoVO> productos) throws RestoranException,RemoteException 
	{
		System.out.println("Amanece que no es poco");


		try
		{
			ProveedorBean proveedor=ProveedorDao.getProveedorByName(arg1.getNombre());
			if(proveedor==null) throw new RestoranException("Proveedor no valido");
			DepositoBean deposito=DepositoDao.getDepositoByEncargado(arg0);
			if(deposito==null) throw new RestoranException("El usuario no tiene permisos para hacer esta operacion");
			
			String strDiferencias="";
			String sep="";
			
			
			for(int i=0;i<productos.size();i++)
			{
				ItemRequerimientoVO p=productos.get(i);
				
				
				
				List<OrdenCompraBean>resp=(List<OrdenCompraBean>)OrdenCompraDao.getOrdenesCompraProveedorDepositoPendientes(proveedor, deposito);
				if(resp.size()==0) throw new RestoranException("El producto "+p.getProduc().getNombre()+" no esta en ninguna orden de compra vigente");
				
				for(int j=0;j<resp.size();j++)
				{
					OrdenCompraBean ordenCompra=resp.get(j);
					List<ItemOrdenCompraBean> itemes=ordenCompra.getItemes();
						
					for(int h=0;h<itemes.size();h++)
					{
						ItemOrdenCompraBean ioc=itemes.get(h);
						ProductoBean prod=ioc.getProducto();
						if(prod.getNombre().equals(p.getProduc().getNombre()))
						{
								if(ioc.getCantidad()!=p.getCantidad())
								{
									int diferencia=ioc.getCantidad()-p.getCantidad();
									String direccion="Faltan ";
									if(diferencia<0) direccion="Sobran ";
									if("".equals(sep)) sep="DIFERENCIAS:";
									strDiferencias+=sep+direccion+Math.abs(diferencia)+" "+prod.getNombre();
									sep=";";
								}
								
						}
					}
						
					
					if("".equals(strDiferencias)) 
					{
						for(int h=0;h<itemes.size();h++)
						{
							ItemOrdenCompraBean ioc=itemes.get(h);
							DepositoDao.actualizarStock(deposito, ioc);
						}
						ordenCompra.setEstado("completa");
						OrdenCompraDao.actualizarOrdenCompra(ordenCompra);
					}
					else
					{
						throw new RestoranException(strDiferencias); 
					}
				}
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
			throw new RemoteException(e.getMessage());
		}
	
	}

	@Override
	public EmpleadoVO login(EmpleadoVO arg0) throws RestoranException,RemoteException {
		
		System.out.println("Llega a ControladorSwing Login");
		
		System.out.println("user "+arg0.getIdUsuario());
		System.out.println("pass "+arg0.getPassword());
		
		EmpleadoDao empleDao = new EmpleadoDao();
		
			System.out.println("Llega a ControladorSwing Login pasa if");
			IngresoUsuarioDao ingDao = new IngresoUsuarioDao();
			int obtenerId = 0;
			Date fechaHoy = new Date();
			
			try{
			
			EmpleadoVO empleado = empleDao.traerEmpleado(arg0.getIdUsuario());
			System.out.println("empleado logged "+empleado.isLogged());
			if(empleado.isLogged())
			{
				IngresoUsuarioBean ingUsu = new IngresoUsuarioBean();
				IngresoUsuarioId idIngUsu = new IngresoUsuarioId();
				idIngUsu.setIdEmpleado(obtenerId);
				idIngUsu.setIngresoUsuario(ingDao.traerMaxIngreso());
				ingUsu.setFechaHora(fechaHoy);
				ingUsu.setId(idIngUsu);
				
				//ingDao.altaIngresoUsuario(ingUsu);
			}
			System.out.println("Llega a ControladorSwing Login tomo empleado");
			return empleado;
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
			return null;
			 
		 
		
		
	}
	
		
	
}
